//
//  SinaAccountModel.swift
//  weibo
//
//  Created by guyue on 16/1/3.
//  Copyright © 2016年 guyue. All rights reserved.
//

import UIKit
                            //归档需要遵守NSCoding协议
class SinaAccountModel: NSObject,NSCoding {

    /*
    返回值字段	字段类型	字段说明
    access_token	string	用于调用access_token，接口获取授权后的access token。
    expires_in	string	access_token的生命周期，单位是秒数。 //这里是秒数应该是NSNumebr
    
    uid	string	当前授权用户的UID。
    */
    
    //KVC 动态给属性赋值
    
    var access_token: String?
    
    var expires_in: NSTimeInterval = 0{
        
        //didSet是在外部给expires_in赋值的时候调用的
        didSet{
                //把秒数传递给NSDate.转换为NSDate类型的时间变量
            
            expires_date = NSDate(timeIntervalSinceNow: expires_in)
        
        }
    
    
    }
    
    var uid: String?
    
    //定义一个属性,来接收时间,以便子啊外部也能访问
    
    
    var expires_date: NSDate?
    
    //screen_name	string	用户昵称
    var screen_name: String?
    
    //profile_image_url	string	用户头像地址（中图），50×50像素
    
    var profile_image_url: String?
    
    
    
    //dic里面会有比属性更多的key.需要实现 forUndefinedKey这个方法.否则会崩溃,实现了就不会崩溃
    init(dic: [String: AnyObject]) {
        
        //首先调用父类的构造方法
        super.init()
        
        setValuesForKeysWithDictionary(dic)
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    //MARK:-归档和解档来存储信息
    
    //解档,从硬盘中读取二进制,然后转变为对象
    required init?(coder aDecoder: NSCoder) {
        
        //因为后面是AnyObject类型的,而前面是string类型的,所以需要类型转换
        self.uid = aDecoder.decodeObjectForKey("uid") as? String
        self.access_token = aDecoder.decodeObjectForKey("access_token") as? String
        self.expires_date = aDecoder.decodeObjectForKey("expires_date") as? NSDate
        self.screen_name = aDecoder.decodeObjectForKey("screen_name") as? String
        self.profile_image_url = aDecoder.decodeObjectForKey("profile_image_url") as? String
    }
    
    //归档,把对象转变为二进制保存在硬盘里
    func encodeWithCoder(aCoder: NSCoder) {
        
        aCoder.encodeObject(self.uid, forKey: "uid")
        aCoder.encodeObject(self.access_token, forKey: "access_token")
        aCoder.encodeObject(self.expires_date, forKey: "expires_date")
        aCoder.encodeObject(self.screen_name, forKey: "screen_name")
        aCoder.encodeObject(self.profile_image_url, forKey: "profile_image_url")
    }
    
    
    //MARK:--调用保存的方法
    
    func saveInfo(){
        
        //获取沙盒路径
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true).last
    
        //拼接文件名  path是可选项,可以从沙盒中肯定能获取到,强解包即可
        let filePath = (path! as NSString).stringByAppendingPathComponent("21.plist")
        
        //保存
        NSKeyedArchiver.archiveRootObject(self, toFile: filePath)
    
    
    }
    
    
    
    
    
    
    
    
    
    
    
}
